/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;


import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;

import model.Avaliacao;
/**
 *
 * @author André
 */
public class AvaliacaoDAO {
    
     public boolean criar(Avaliacao avaliacao) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "insert into avaliacao(matricula, vencimento, data_pagamento,valor, status) values (?,?,null, 30,1)";
            // seta os parametros no sql
            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1, avaliacao.getMatricula().getMatricula());
            pstmt.setDate(2,new Date(avaliacao.getVencimento().getTime()) );
         

            System.out.println(sql);
            pstmt.execute();

            conexao.close();
            return true;

        } catch (SQLException sql) {

            return false;

        }
    }
     
        public boolean criarNovaAvaliacao(Avaliacao avaliacao) {
            try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "insert into avaliacao(matricula, vencimento, data_pagamento,valor, status) values (?,?,null,30,1)";
            // seta os parametros no sql
            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1, avaliacao.getMatricula().getMatricula());
            System.out.println("número da matricula no criar nova mensalidade" + avaliacao.getMatricula().getMatricula());
            Date d = new Date(avaliacao.getVencimento().getTime());
            Calendar c = Calendar.getInstance();
            c.setTime(d);
            c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 3);
            pstmt.setDate(2,new java.sql.Date(c.getTimeInMillis()));

            System.out.println(sql);
            pstmt.execute();

            conexao.close();
            return true;

        } catch (SQLException sql) {

            return false;

        }
        }
    
     


    public ArrayList<Avaliacao> buscarAvaliacoes(int matricula) throws ClassNotFoundException {
        ArrayList<Avaliacao> avaliacoes = new ArrayList<Avaliacao>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from avaliacao where matricula =? and status=1 ";


            PreparedStatement pst = conexao.prepareStatement(sql);
            
            pst.setInt(1, matricula);

      
            ResultSet rs = pst.executeQuery();
           

            MatriculaDAO matriculaDAO = new MatriculaDAO();

            while (rs.next()) {
                Avaliacao avaliacao = new Avaliacao();
                avaliacao.setId(rs.getInt("id"));
                avaliacao.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                avaliacao.setVencimento(rs.getDate("vencimento"));
                avaliacao.setStatus(rs.getInt("status"));
                avaliacao.setData_pagamento(rs.getDate("data_pagamento"));
                avaliacoes.add(avaliacao);
            }
            conexao.close();
            return avaliacoes;

        } catch (SQLException sql) {
            return null;
        }

    }
    
        public ArrayList<Avaliacao> buscarAvisoAvaliacao() throws ClassNotFoundException {
        ArrayList<Avaliacao> avaliacoes = new ArrayList<Avaliacao>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from avaliacao where status = 1 or status =2 and vencimento between current_date and current_date +3 ";


            PreparedStatement pst = conexao.prepareStatement(sql);

      
            ResultSet rs = pst.executeQuery();
            conexao.close();

            MatriculaDAO matriculaDAO = new MatriculaDAO();
            java.util.Date hoje = new java.util.Date();
            java.sql.Date dataAtual = new java.sql.Date(hoje.getTime());

            while (rs.next()) {
                Avaliacao avaliacao = new Avaliacao();
                avaliacao.setId(rs.getInt("id"));
                avaliacao.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                avaliacao.setVencimento(rs.getDate("vencimento"));
                avaliacao.setStatus(rs.getInt("status"));
                avaliacao.setData_pagamento(rs.getDate("data_pagamento"));
                avaliacoes.add(avaliacao);
            }
      
            return avaliacoes;

        } catch (SQLException sql) {
            return null;
        }

    }

    public Avaliacao buscarByCodigo(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from avaliacao where id=? and status=1");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();

        Avaliacao avaliacao = new Avaliacao();
        MatriculaDAO matriculaDAO = new MatriculaDAO();
        while (rs.next()) {
            
                avaliacao.setId(rs.getInt("id"));
                avaliacao.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                avaliacao.setVencimento(rs.getDate("vencimento"));
                avaliacao.setStatus(rs.getInt("status"));
                avaliacao.setData_pagamento(rs.getDate("data_pagamento"));

        }
        conexao.close();
        return avaliacao;
    }
    
        public Avaliacao buscarByMatricula(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from avaliacao where matricula=? and status=1");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();

        Avaliacao avaliacao = new Avaliacao();
        MatriculaDAO matriculaDAO = new MatriculaDAO();
        while (rs.next()) {
            
                avaliacao.setId(rs.getInt("id"));
                avaliacao.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                avaliacao.setVencimento(rs.getDate("vencimento"));
                avaliacao.setStatus(rs.getInt("status"));
                avaliacao.setData_pagamento(rs.getDate("data_pagamento"));

        }
        conexao.close();
        return avaliacao;
    }

    public boolean atualizar(Avaliacao avaliacao) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update avaliacao set matricula=?, vencimento=?, status=? data_pagamento=? where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setInt(1, avaliacao.getMatricula().getMatricula());
            pstmt.setDate(2,new Date(avaliacao.getVencimento().getTime()) );
            pstmt.setInt(3, avaliacao.getStatus());
            pstmt.setDate(4, avaliacao.getData_pagamento());
            pstmt.setInt(5, avaliacao.getId());

            System.out.println(sql);
            pstmt.execute();
            System.out.println("avaliacao atualizada com sucesso");
            conexao.close();
            return true;
        } catch (SQLException sql) {
            System.out.println("Erro ao atualizar registro");
           
            return false;

        }
    }

  /*  public boolean marcarAtrasado(int id) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update produto set status=2 where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1, id);


            pstmt.execute();

            conexao.close();
            return true;
        } catch (SQLException sql) {
        
            return false;

        }
    }*/
    
        public boolean avaliacaoEfetuada(int id) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update avaliacao set status=0 where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1, id);


            pstmt.execute();

            conexao.close();
            return true;
        } catch (SQLException sql) {
        
            return false;

        }
    }
    
    

        
        
    public ArrayList<Avaliacao> buscarPorData(Date data_inicial, Date data_final) throws ClassNotFoundException {
        ArrayList<Avaliacao> avaliacoes = new ArrayList<Avaliacao>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from avaliacao where  data_pagamento between ? and ? and status=1 ";


            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setDate(1, data_inicial);
            pst.setDate(2, data_final);
            ResultSet rs = pst.executeQuery();
            MatriculaDAO matriculaDAO = new MatriculaDAO();
                    



            while (rs.next()) {
                Avaliacao avaliacao = new Avaliacao();
         
                avaliacao.setId(rs.getInt("id"));
                avaliacao.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                avaliacao.setVencimento(rs.getDate("vencimento"));
                avaliacao.setData_pagamento(rs.getDate("data_pagamento"));
                avaliacao.setStatus(rs.getInt("status"));
              
                avaliacoes.add(avaliacao);
            }
            conexao.close();
            return avaliacoes;

        } catch (SQLException sql) {
            return null;
        }

    }

        
        
        
        
            
    
}
